<?php
if (!defined('MVC_ROOT_DIR'))  die('Hacking attempt');
class Actions
{	
	public static function getPmoduleName(){		
		return $_GET['pmodule'];
	}
	/** 
	 * 获取当前url模型名称
	 */
	public static function getModuleName()
	{		
		return $_GET['module'];
	}
	/** 
	 * 获取当前url类名称
	 */
	public static function getClassName()
	{
		return self::getModuleName().'Actions';
	}
	/** 
	 * 获取当前actions名称
	 */
	public static function getActionName()
	{		
		$toActions = ucfirst(strtolower(@$_GET['actions']));		
		return $toActions;
	}
	/** 
	 * 将变量输出到模板中
	 * 使用方法
	 * 1:在someActions中$this->assign('title','MVC框架');
	 * 2:在模板文件some.tpl.php中<?php echo $title;?>即可
	 * @param unknown_type $v
	 * @param unknown_type $p
	 */
	public static  function assign($v,$p)
	{		
		global $tpl;
		$tpl->assign($v,$p);		
	}
	/** 
	 * 是否使用公共模板文件,该文件位置/app/templates/layout.php 
	 * 使用方法:在someActions中$this->layout();
	 * @param String $v
	 * @param String $file
	 */
	public static function layout($v='1',$file=''){
		global $tpl;
		$tpl->layout=$v;
		if ($file){
			$tpl->layoutFile=$file;
		}
	}
	/** 
	 * 添加JS文件到模板
	 * 使用方法
	 * 1:在someActions中$this->addCss('js/main.js');
	 * 2:在模板中直接输出<?php echo $js?>即可
	 * @param void $css
	 */	
	public static function addJs($js)
	{
		global $tpl;
		
		$tpl->addJs($js);
	}
	/** 
	 * 添加CSS文件到模板
	 * 使用方法
	 * 1:在someActions中$this->addCss('css/main.css');
	 * 2:在模板中直接输出<?php echo $css?>即可
	 * @param void $css
	 */
	public static function addCss($css)
	{
		global $tpl;
		$tpl->addCss($css);
	}
	/** 
	 * 显示模板文件
	 * 使用方法$this->display();
	 * 如果函数名为someActions则默认加载/app/somemodules/templates/some.tpl.php
	 * @param void $tpl_file
	 */
	public static function display($tpl_file=''){
		global $tpl;		
		$toModule = self::getModuleName();		
		$toPmodule = self::getPmoduleName();
		$tplDir = MVC_ROOT_DIR.DIRECTORY_SEPARATOR.'app'
		.DIRECTORY_SEPARATOR.'modules'
		.DIRECTORY_SEPARATOR.$toPmodule
		.DIRECTORY_SEPARATOR.$toModule.DIRECTORY_SEPARATOR.'templates';		
		if ($tpl_file==''){
			$templateFile = strtolower(self::getActionName()).'.tpl.php';			
			$tpl->template_dir = $tplDir.DIRECTORY_SEPARATOR.$templateFile;	
		}else{
			$tpl->template_dir = $tplDir.DIRECTORY_SEPARATOR.$tpl_file;	
		}		
		$tpl->display();
	}
	
	/** 
	 * 运行主函数
	 */
	public static  function run()
	{	
		global $tpl;	
		$toPmodule = self::getPmoduleName();
		$toModule = self::getModuleName();		
		$moduleFile = MVC_ROOT_DIR.DIRECTORY_SEPARATOR.'app'		
		.DIRECTORY_SEPARATOR.'modules'
		.DIRECTORY_SEPARATOR.$toPmodule
		.DIRECTORY_SEPARATOR.$toModule.DIRECTORY_SEPARATOR.'actions'.DIRECTORY_SEPARATOR.'actions.class.php';
		if (file_exists($moduleFile))
		{
			require_once $moduleFile;
		}else {
			
			if (MVC_DEBUG==0)	self::redirect();
			
			errors(2004,'zh',$moduleFile);
		}
		$toClass = self::getClassName();
		$toActions= 'actions'.self::getActionName();
		if (class_exists($toClass)) {
		    $module = new $toClass;			    
		}else{
			errors(2001,'zh',$toClass);
		}
		if(method_exists($module,$toActions)){
			$module-> $toActions();	
		}else{
			
			if (MVC_DEBUG==0) self::redirect($toModule);
			
			errors(2002,'zh',$toModule.'::'.$toActions);
		}			
		if ($tpl->template_dir==''){			
			$templateFile = strtolower(self::getActionName()).'.tpl.php';			
			self::display($templateFile);	
						 
		}		
		unset($tpl);
	}
	/**
	 * 
	 * 缓存当前ACTION
	 * @return boolean
	 */
	public static function thisActionCache($cacheFileDir,$cacheFileName,$cacheTime){
		global $tpl;
	    if($tpl->isFileCache)
	    {
	    	$c = ob_get_contents();
			if (is_dir($cacheFileDir)) {
				$dh=opendir($cacheFileDir);//打开目录  //列出目录中的所有文件并去掉 . 和 ..  
				while (false !== ( $file = readdir ($dh)))
				{
					if($file!="." && $file!="..")
					{
						$fullpath=$cacheFileDir.$file;
						if(!is_dir($fullpath)) {
							if((filemtime($fullpath)+$cacheTime)<time()) 	unlink($fullpath);//删除目录中过期的文件
						}
					}
				}
			}		
			file_put_contents($cacheFileName, $c);
	    }
	}
	/** 
	 * 开发的过程中一般后台不需要设置缓存
	 * 则在someActions中$tshi
	 * @param integer $v
	 */
	public static function noCache()
	{
		global $tpl;
		$tpl->isFileCache=0;		
	}
	
	/**
	 * http重定向
	 * @param String $act
	 */
	public static function redirect($act=null){
		header("Location: ".MVC_WWW_HOST.$act);
		die();
	}
	public static function tourl($url){
	    header("Location: ".$url);
	    die();
	}
	/**
	 * 
	 * $target = parent   window   top
	 * @param unknown_type $act
	 * @param unknown_type $target
	 */
	public static  function location($act=null,$target='window'){
		
		echo '<script>
		'.$target.'.location="'.MVC_WWW_HOST.$act.'";
		</script>';
	}
}
